package com.proxy.proxyType;

import com.proxy.proxyClass.Poet;
import com.proxy.proxyClass.impl.GrandPoet;

import java.lang.reflect.Proxy;

/**
 * @Title: GrandPoetDynamicProxy
 * @Author xiaowu
 * @Package com.proxy.proxyType
 * @Data 2024/5/21 10:50
 * @Description: 动态代理诗人接口
 */
public class GrandPoetDynamicProxy {
    public static Poet createProxy(GrandPoet grandPoet) {
        return (Poet) Proxy.newProxyInstance(
//                参数一：用于指定用这个类加载器，去加载生成的代理类
                GrandPoetDynamicProxy.class.getClassLoader(),
                //参数二：指定接口，这些接口，这些接口用于指定生成的代理长什么样，也就是有那些方法
                new Class[]{Poet.class},
//                参数三：用来指定生成的代理对象要干什么事情
                (proxy, method, args) -> {
                    /*
                     *   参数一:代理的对象
                     *   参数二：要运行的方法sing
                     *   参数三：调用sing方法时，传递的实参
                     * */
                    if ("readPoet".equals(method.getName())) {
                        System.out.println("动态代理的诗人在读诗");
                    } else if ("writePoet".equals(method.getName())) {
                        System.out.println("动态代理的诗人在写诗");
                    } else if ("thinkDeeply".equals(method.getName())) {
                        System.out.println("动态代理的诗人在深度思考");
                    }
                    return method.invoke(grandPoet, args);
                }
        );
    }
}
